﻿using System;
using System.Reflection;

namespace Sencha.Direct.Api
{
	static class ApiUtils
	{
		public static ResultT GetAttributeValue<AttributeT, ResultT>(this ICustomAttributeProvider provider, bool inherit, Func<AttributeT, ResultT> getter) where AttributeT : Attribute
		{
			if (provider == null)
				throw new ArgumentNullException("provider");
			if (getter == null)
				throw new ArgumentNullException("getter");

			var attributeObj = provider.GetCustomAttributes(typeof(AttributeT), inherit);
			if (attributeObj == null || attributeObj.Length == 0)
				return default(ResultT);
			else
				return getter((AttributeT)attributeObj[0]);
		}
		public static bool IsDefined<AttributeT>(this ICustomAttributeProvider provider, bool inherit) where AttributeT : Attribute
		{
			if (provider == null)
				throw new ArgumentNullException("provider");

			var attributeObj = provider.GetCustomAttributes(typeof(AttributeT), inherit);
			return (attributeObj != null && attributeObj.Length != 0);
		}
	}
}
